import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Arma enemiga utilizada por el jefe que inflije 20 putnos de daño a la salud heroe
 * 
 * @author (Octavio y Cesar) 
 * @version (2014.11.28)
 */
public class EProton extends Guns
{
    private Timer time;
    /**
     * contructor de variables de la clase EBomb
     */
    public EProton() 
    {
        super(30);
        time= new Timer();
    }

   /**
     * mueve la bala enemiga y valida si el mundo no ah sido reiniciado si no es asi remueve 
     * la bala al tocar al heroe
     */
    public void act() 
    {
        // Add your action code here.
        randomTurn();
         if(getY()>=getWorld().getHeight()-10)
          getWorld().removeObject(this);
          else
         if(isTouching(Hero.class) && ((Space)getWorld()).getHero().getHealth()>=0)
         { 
            
           (((Space)getWorld()).getHero()).damageHero(super.getDamage());
           if(getWorld()!=null)
            getWorld().removeObject(this);
           
         }
        checaTiempo();         
        
    }    
    
    /**
     * checa el tiempo en que sera removida del mundo la bala rastreadora
     * para impedir que siga al heroe todo el tiempo
     */
    public void checaTiempo()
    {
        time.increases();  
        if(time.getTime()>=200)  
        { 
            time.reset();
            getWorld().removeObject(this);

        } 
    }
    
    /**
     * calcula la distancia que hay entre el heroe y la bala y utilizando funciones
     * trigonometricas se logra que siga la trayectoria del heroe 
     */
    public void randomTurn()
    {
        int deltaX= ((Space)getWorld()).getHero().getX() -getX();
        int deltaY= ((Space)getWorld()).getHero().getY() -getY();
        setRotation((int)(180*Math.atan2(deltaY,deltaX)/Math.PI)+180);

        double angle=Math.toRadians(getRotation());

        int x= (int)Math.round(getX()+Math.cos(angle) * -3);
        int y= (int)Math.round(getY()+Math.sin(angle) * -3);

        setLocation(x,y);

    }
}
